
/**
 * 
 */
package com.zsrt.day20170407;

import org.junit.Test;

/**
 * 冒泡算法
 * 得到一个从大到小排列的数组
 * 
 * 优化代码：1.如果数组本来就是有序的怎么办？
 *        2.每次循环能不能都少一次？
 *         解决： 因为每次冒泡比较都比上一次少一次
 * @author jmj
 * @date 2017年4月7日
 * @time 下午4:37:41
 */
public class MaoPao {
	@Test
	public void maoPaoDescTest() throws Exception {
		int[] a =new int[]{5,4,3,7,9};
		maoPaoDesc(a);
		/*for(int i=0;i<a.length;i++){
			System.err.print(a[i]+"");
		}*/
	}
	
	/**
	 * 循环整个数组得到有序排列
	 * @param arrays
	 */
	public void maoPaoDesc(int[] arrays){
		//因为四个数据的数组只需要进行冒泡三次
		for(int i =1;i<=arrays.length-1;i++){
			int a =xunhHuan1ci(arrays,i);
			for(int j=0;j<arrays.length;j++){
				System.out.print(arrays[j]+"");
			}
			System.out.println();
			//如果a=0说明没有进入if判断句 原数组有序 就不需执行下面的冒泡循环
			if(a==0){
				break;
			}
			
		}
	}
	/**
	 * 冒泡循环1次
	 * @param arrays
	 */
	public int xunhHuan1ci(int[] arrays,int j){
		//1.问题解决思路 定义一个变量a
		int a=0;
		//每次进行冒泡时次数是递减的
		for(int i=0;i<=arrays.length-1-j;i++){
			if(arrays[i]<arrays[i+1]){
				//如果进入if判断句a加1
				a++;
				int temp   = arrays[i];
				arrays[i]  = arrays[i+1];
				arrays[i+1]= temp;
			}
		}
		//如果没有进入if 说明原数组本来就是有序的 返回a的值
		return a;
	}

}
